home *** CD-ROM | disk | FTP | other *** search
/ Computer Select (Limited Edition) / Computer Select.iso / msj / v06n06 / intnat.exe / INTERN.EXE / INTERNAT.C < prev    next >
Encoding:
C/C++ Source or Header  |  1991-11-01  |  4.7 KB  |  219 lines

  1. /* 
  2.  * Resident segment for INTERNAT
  3.  *
  4.  * William S. Hall
  5.  * 3665 Benton Street, #66
  6.  * Santa Clara, CA 95051
  7.  *
  8.  */
  9.  
  10. #define NOKANJI
  11. #define NOCOMM
  12. #define NOSOUND
  13. #include <windows.h>
  14. #include <string.h>
  15. #include "internat.h"
  16. #include "interint.h"
  17. #include "interfns.h"
  18. #include "interstr.h"
  19. #include "intrlang.h"
  20.  
  21. /* local functions */
  22. static void NEAR MainWndPaint(HWND hWnd, HDC hDC);
  23. static void NEAR LangDlgInit(HWND hDlg);
  24. static int NEAR LangDlgGet(HWND hDlg);
  25.  
  26. /* Entry point for program */
  27. int PASCAL WinMain(HANDLE hInstance, HANDLE hPrevInstance,
  28.            LPSTR lpszCmdLine, int cmdShow)
  29. {
  30.  
  31.     MSG msg;
  32.  
  33.   /* If initialization is not successful then exit */
  34.     if (!InitProgram(hInstance,hPrevInstance, lpszCmdLine, cmdShow))
  35.     return FALSE;
  36.  
  37.   /* Retrieve messages from Windows */
  38.     while (GetMessage((LPMSG)&msg,NULL,0,0)) {
  39.     TranslateMessage((LPMSG)&msg);
  40.     DispatchMessage((LPMSG)&msg);
  41.     }
  42.     return msg.wParam;        /* exit program */
  43. }
  44.  
  45. /* All messages are processed here */
  46. long FAR PASCAL MainWndProc(HWND hWnd,unsigned message,WORD wParam,LONG lParam)
  47. {
  48.  
  49.     PAINTSTRUCT ps;
  50.  
  51.     switch(message) {
  52.  
  53.     case WM_KEYDOWN:    /* show the keyboard parameters */
  54.     case WM_KEYUP:
  55.     case WM_CHAR:
  56.     case WM_DEADCHAR:
  57.         DoKeyStuff(hWnd, message, wParam, lParam);
  58.         break;
  59.  
  60.     case WM_CREATE:
  61.         WndCreate(hWnd);
  62.         break;
  63.         
  64.     case WM_CLOSE:
  65.         DestroyWindow(hWnd);
  66.         break;
  67.  
  68.     case WM_COMMAND:
  69.         WndCommand(hWnd, wParam);
  70.         break;
  71.  
  72.     case WM_DESTROY:    /* free the language resource, if used */
  73.         if ((hRC) && (hRC != hInst))
  74.             FreeLibrary(hRC);
  75.         PostQuitMessage(0);
  76.         break;
  77.  
  78.     case WM_PAINT:
  79.         BeginPaint(hWnd, (LPPAINTSTRUCT)&ps);
  80.         MainWndPaint(hWnd, ps.hdc);
  81.         EndPaint(hWnd, (LPPAINTSTRUCT)&ps);
  82.         break;
  83.  
  84.     default:
  85.         return ((long)DefWindowProc(hWnd,message,wParam,lParam));
  86.         break;
  87.     }
  88.     return(0L);
  89. }
  90.  
  91. /* update the window */
  92. static void NEAR MainWndPaint(HWND hWnd, HDC hDC)
  93. {
  94.  
  95. #define SHSP 8192
  96.  
  97.     register int i, j;
  98.     int base;
  99.     int buf[16];
  100.     int x, y;
  101.  
  102.   /* Select colors and character set */
  103.     SetBkColor(hDC, GetSysColor(COLOR_WINDOW));
  104.     SetTextColor(hDC, GetSysColor(COLOR_WINDOWTEXT));
  105.     SelectObject(hDC, OEMCharSet ? GetStockObject(OEM_FIXED_FONT) : 
  106.               GetStockObject(SYSTEM_FIXED_FONT));
  107.  
  108.   /* Draw the character display according to the buffer contents */
  109.     y = cheight;
  110.     x = cwidth;
  111.     for (i = 0; i < 16; i++) {
  112.     base = 16 * i;
  113.         for (j = 0; j < 16; j++) {
  114.         buf[j] = display[base + j] + SHSP;
  115.     }
  116.     TextOut(hDC, x, y, (BYTE *)buf, sizeof(buf));
  117.     y += cheight;
  118.     }
  119.  
  120.   /* Show the action of the keys */
  121.     SelectObject(hDC, GetStockObject(SYSTEM_FIXED_FONT));
  122.     x = kwidth;
  123.     y = cheight;
  124.  
  125.     TextOut(hDC, x, y, kbdbuf, strlen(kbdbuf));
  126.     y += cheight;
  127.     TextOut(hDC, x, y, kbubuf, strlen(kbubuf));
  128.     y += cheight;
  129.     TextOut(hDC, x, y, kbbuf, strlen(kbbuf));
  130. }
  131.  
  132. /* manage ego box */
  133. BOOL FAR PASCAL AboutDlg(HWND hDlg, unsigned message, WORD wParam, LONG lParam)
  134. {
  135.  
  136.     switch(message) {
  137.  
  138.     case WM_INITDIALOG:
  139.         break;
  140.  
  141.     case WM_COMMAND:
  142.         switch(wParam) {
  143.         case IDOK:
  144.         case IDCANCEL:
  145.             EndDialog(hDlg, TRUE);
  146.             break;
  147.  
  148.         default:
  149.             return FALSE;
  150.         }
  151.         break;
  152.  
  153.     default:
  154.         return FALSE;
  155.     }
  156.     return TRUE;
  157. }
  158.  
  159. /* Manage a request to change the language */
  160. BOOL FAR PASCAL LangDlgFunc(HWND hDlg, unsigned message, WORD wParam, LONG lParam)
  161. {
  162.  
  163.     switch(message) {
  164.  
  165.     case WM_INITDIALOG:
  166.         LangDlgInit(hDlg);
  167.         break;
  168.  
  169.     case WM_COMMAND:
  170.         switch(wParam) {
  171.         case IDOK:
  172.             EndDialog(hDlg, LangDlgGet(hDlg));
  173.             break;
  174.  
  175.         default:
  176.             return FALSE;
  177.         }
  178.         break;
  179.  
  180.     default:
  181.         return FALSE;
  182.     }
  183.     return TRUE;
  184. }
  185.  
  186. /* Initialize the language selection box */
  187. static void NEAR LangDlgInit(HWND hDlg)
  188. {
  189.     char buf[80];
  190.     register int i;
  191.  
  192.     for (i = IDS_ENGLISH; i <= IDS_PIGLATIN; i++) {
  193.         LoadString(hInst, i, buf, sizeof(buf));
  194.         SendDlgItemMessage(hDlg,IDD_LANGLIST,CB_ADDSTRING,0,(LONG)(LPSTR)buf);    
  195.     }
  196.     SendDlgItemMessage(hDlg, IDD_LANGLIST, CB_SETCURSEL, 0, 0L);
  197.  
  198. }
  199.  
  200. /* Get the selected langauge */
  201. static int NEAR LangDlgGet(HWND hDlg)
  202. {
  203.     char buf[80];
  204.     char name[80];
  205.     int sel;
  206.     int i = IDS_ENGLISH;
  207.  
  208.     sel = (int)SendDlgItemMessage(hDlg, IDD_LANGLIST, CB_GETCURSEL, 0, 0L);
  209.     if (sel != CB_ERR) {
  210.         SendDlgItemMessage(hDlg,IDD_LANGLIST,CB_GETLBTEXT,sel,(LONG)(LPSTR)name);
  211.         for (i = IDS_ENGLISH; i <= IDS_PIGLATIN; i++) {
  212.             LoadString(hInst, i, buf, sizeof(buf));
  213.         if (lstrcmp(buf, name) == 0)
  214.             break;
  215.         }
  216.     }
  217.     return i;
  218. }
  219.